home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / FunSnake / FunSnake.jar / FunSnakeCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-05-20  |  8.0 KB  |  505 lines

  1. import java.util.Random;
  2. import java.util.Timer;
  3. import javax.microedition.lcdui.Canvas;
  4. import javax.microedition.lcdui.Font;
  5. import javax.microedition.lcdui.Graphics;
  6. import javax.microedition.lcdui.Image;
  7.  
  8. class FunSnakeCanvas extends Canvas {
  9.    private int iScreenWidth;
  10.    private int iScreenHeight;
  11.    private int iPlayWidth;
  12.    private int iPlayHeight;
  13.    private int iHeightPercent = 85;
  14.    private int borderLevel = 1;
  15.    private int bordersElem;
  16.    private int[][] borders;
  17.    private int numSnakes = 2;
  18.    private int maxSnakes;
  19.    private int numTarget;
  20.    private int[] xPos;
  21.    private int[] yPos;
  22.    private int[] xPosOld;
  23.    private int[] yPosOld;
  24.    private int[] xTPos;
  25.    private int[] yTPos;
  26.    private boolean targetOK;
  27.    private boolean gameOverOK;
  28.    private boolean fireOK;
  29.    private boolean bContinue;
  30.    private int elemMove;
  31.    private int[] numRElem;
  32.    private int[] orient;
  33.    private int[] iCurrentTarget;
  34.    private int iEatedTarget;
  35.    private int score;
  36.    private int lives;
  37.    private int iSpeed;
  38.    private int level;
  39.    private int[][][] elemPositions;
  40.    protected Timer snakeTimer;
  41.    protected Timer snakeTimer2;
  42.    private Random rand;
  43.    Image mainImage;
  44.    Graphics mainGraphics;
  45.  
  46.    public FunSnakeCanvas(int var1, int var2, int var3) {
  47.       this.maxSnakes = this.numSnakes;
  48.       this.numTarget = 1;
  49.       this.targetOK = true;
  50.       this.gameOverOK = false;
  51.       this.fireOK = false;
  52.       this.bContinue = false;
  53.       this.score = 0;
  54.       this.lives = 3;
  55.       this.rand = new Random(System.currentTimeMillis());
  56.       this.xTPos = new int[this.numTarget];
  57.       this.yTPos = new int[this.numTarget];
  58.       this.iCurrentTarget = new int[this.numTarget];
  59.       this.xPos = new int[this.numSnakes];
  60.       this.yPos = new int[this.numSnakes];
  61.       this.xPosOld = new int[this.numSnakes];
  62.       this.yPosOld = new int[this.numSnakes];
  63.       this.numRElem = new int[this.numSnakes];
  64.       this.orient = new int[this.numSnakes];
  65.       this.elemPositions = new int[this.numSnakes][40][2];
  66.       this.iSpeed = var1;
  67.       this.elemMove = var3;
  68.       this.level = var2;
  69.       this.setAll();
  70.    }
  71.  
  72.    public void setAll() {
  73.       this.setLevel(this.level);
  74.  
  75.       for(int var1 = 0; var1 < this.numSnakes; ++var1) {
  76.          this.numRElem[var1] = 2;
  77.          this.orient[var1] = 2;
  78.          this.xPosOld[var1] = -1;
  79.          this.yPosOld[var1] = -1;
  80.          this.xPos[var1] = this.elemMove * 5 * 2;
  81.          this.yPos[var1] = this.elemMove * 5 * (var1 + 1);
  82.       }
  83.  
  84.       for(int var2 = 0; var2 < this.numTarget; ++var2) {
  85.          this.xTPos[var2] = this.elemMove * 15;
  86.          this.yTPos[var2] = this.elemMove * 10;
  87.          this.iCurrentTarget[var2] = 1;
  88.       }
  89.  
  90.       this.iEatedTarget = 1;
  91.       this.iScreenWidth = ((Canvas)this).getWidth();
  92.       this.iScreenHeight = ((Canvas)this).getHeight();
  93.       this.iPlayHeight = this.iScreenHeight * this.iHeightPercent / 100;
  94.       this.mainImage = Image.createImage(this.iScreenWidth, this.iScreenHeight);
  95.       this.mainGraphics = this.mainImage.getGraphics();
  96.       this.mainGraphics.setColor(255, 255, 255);
  97.       this.mainGraphics.fillRect(0, 0, ((Canvas)this).getWidth(), ((Canvas)this).getHeight());
  98.       this.mainGraphics.setColor(0, 0, 0);
  99.  
  100.       for(int var3 = 0; var3 < this.numSnakes; ++var3) {
  101.          this.mainGraphics.fillRect(this.xPos[var3], this.yPos[var3], this.elemMove, this.elemMove);
  102.          this.elemPositions[var3][0][0] = this.xPos[var3];
  103.          this.elemPositions[var3][0][1] = this.yPos[var3];
  104.          this.elemPositions[var3][1][0] = this.xPos[var3] + this.elemMove;
  105.          this.elemPositions[var3][1][1] = this.yPos[var3];
  106.       }
  107.  
  108.       for(int var4 = 0; var4 < this.numTarget; ++var4) {
  109.          this.mainGraphics.fillRect(this.xTPos[var4], this.yTPos[var4], this.elemMove, this.elemMove);
  110.       }
  111.  
  112.       this.snakeTimer = new Timer();
  113.       this.snakeTimer.schedule(new FunSnakeCanvas$BadSnakeTask(this), 0L, (long)this.iSpeed);
  114.    }
  115.  
  116.    public void setLevel(int var1) {
  117.       switch (var1) {
  118.          case 0:
  119.             this.bordersElem = 2;
  120.             this.borders = new int[this.bordersElem][2];
  121.             this.borders[0][0] = this.borders[0][1] = this.borders[1][0] = this.borders[1][1] = 0;
  122.             break;
  123.          case 1:
  124.             this.bordersElem = 10;
  125.             this.borders = new int[this.bordersElem][2];
  126.  
  127.             for(int var2 = 0; var2 < this.bordersElem; ++var2) {
  128.                this.borders[var2][0] = var2 * this.elemMove;
  129.                this.borders[var2][1] = this.elemMove * 10;
  130.             }
  131.             break;
  132.          default:
  133.             this.bordersElem = 2;
  134.             this.borders = new int[this.bordersElem][2];
  135.             this.borders[0][0] = this.borders[0][1] = this.borders[1][0] = this.borders[1][1] = 0;
  136.       }
  137.  
  138.    }
  139.  
  140.    public void calculateScore() {
  141.       this.score += 5;
  142.    }
  143.  
  144.    public int chooseCurrentTarget() {
  145.       int var1;
  146.       for(var1 = -1; var1 < 0; var1 = this.rand.nextInt()) {
  147.       }
  148.  
  149.       int var2 = var1 % 6;
  150.       return var2;
  151.    }
  152.  
  153.    public void setCurrentTarget(int var1, int var2, int var3) {
  154.       String var4 = "O";
  155.       switch (var1) {
  156.          case 1:
  157.             var4 = "0";
  158.             break;
  159.          case 2:
  160.             var4 = "F";
  161.             break;
  162.          case 3:
  163.             var4 = "S";
  164.             break;
  165.          case 4:
  166.             var4 = "R";
  167.             break;
  168.          case 5:
  169.             var4 = "M";
  170.             break;
  171.          default:
  172.             var4 = "I";
  173.       }
  174.  
  175.       Font var5 = Font.getFont(32, 1, 8);
  176.       this.mainGraphics.setFont(var5);
  177.       this.mainGraphics.drawString(var4, var2, var3, 20);
  178.    }
  179.  
  180.    public boolean checkErrorPos(int var1, int var2, int var3) {
  181.       boolean var4 = false;
  182.       byte var5 = 0;
  183.       int var6 = this.iScreenWidth - this.elemMove;
  184.       byte var7 = 0;
  185.       int var8 = this.iPlayHeight;
  186.       if (var2 == var5) {
  187.          var4 = true;
  188.       }
  189.  
  190.       if (var2 >= var6) {
  191.          var4 = true;
  192.       }
  193.  
  194.       if (var3 == var7) {
  195.          var4 = true;
  196.       }
  197.  
  198.       if (var3 >= var8) {
  199.          var4 = true;
  200.       }
  201.  
  202.       if (var1 == 0) {
  203.          for(int var9 = 0; var9 < this.numRElem[0] - 1; ++var9) {
  204.             if (var2 == this.elemPositions[0][var9][0] && var3 == this.elemPositions[0][var9][1]) {
  205.                var4 = true;
  206.             }
  207.          }
  208.  
  209.          for(int var10 = 1; var10 <= this.numSnakes - 1; ++var10) {
  210.             for(int var11 = 0; var11 < this.numRElem[var10]; ++var11) {
  211.                if (var2 == this.elemPositions[var10][var11][0] && var3 == this.elemPositions[var10][var11][1]) {
  212.                   var4 = true;
  213.                }
  214.             }
  215.          }
  216.  
  217.          for(int var12 = 0; var12 < this.bordersElem; ++var12) {
  218.             if (var2 == this.borders[var12][0] && var3 == this.borders[var12][1]) {
  219.                var4 = true;
  220.             }
  221.          }
  222.       }
  223.  
  224.       return var4;
  225.    }
  226.  
  227.    public boolean checkTargetNewPos(int var1, int var2) {
  228.       boolean var3 = true;
  229.       byte var4 = 0;
  230.       int var5 = this.iScreenWidth - this.elemMove;
  231.       byte var6 = 0;
  232.       int var7 = this.iPlayHeight - this.elemMove;
  233.       if (var1 <= var4 || var1 >= var5) {
  234.          var3 = false;
  235.       }
  236.  
  237.       if (var2 <= var6 || var2 >= var7) {
  238.          var3 = false;
  239.       }
  240.  
  241.       return var3;
  242.    }
  243.  
  244.    // $FF: renamed from: Ca (int) void
  245.    public void method_0(int var1) {
  246.       int var2 = 0 + this.elemMove;
  247.       int var10000 = this.iScreenWidth - 2 * this.elemMove;
  248.       int var4 = 0 + this.elemMove;
  249.       var10000 = this.iPlayHeight - this.elemMove;
  250.       var10000 = this.orient[var1];
  251.       boolean var6 = true;
  252.       if (var1 != 0) {
  253.          if (this.xPos[var1] <= 10) {
  254.             var6 = false;
  255.             this.orient[var1] = 2;
  256.          }
  257.  
  258.          if (this.xPos[var1] >= 80) {
  259.             var6 = false;
  260.             this.orient[var1] = 1;
  261.          }
  262.  
  263.          if (this.yPos[var1] <= 10) {
  264.             var6 = false;
  265.             this.orient[var1] = 4;
  266.          }
  267.  
  268.          if (this.yPos[var1] >= 70) {
  269.             var6 = false;
  270.             this.orient[var1] = 3;
  271.          }
  272.       }
  273.  
  274.    }
  275.  
  276.    public void ActionsOnEatedTarget() {
  277.       switch (this.iEatedTarget) {
  278.          case 1:
  279.             this.score += 20;
  280.          case 2:
  281.          default:
  282.             break;
  283.          case 3:
  284.             if (this.numSnakes < this.maxSnakes) {
  285.                ++this.numSnakes;
  286.             }
  287.             break;
  288.          case 4:
  289.             if (this.numSnakes >= 2) {
  290.                --this.numSnakes;
  291.             }
  292.             break;
  293.          case 5:
  294.             this.numRElem[0] = 1;
  295.       }
  296.  
  297.    }
  298.  
  299.    public void calculateElem(int var1, int var2) {
  300.       this.xPosOld[var1] = this.xPos[var1];
  301.       this.yPosOld[var1] = this.yPos[var1];
  302.       switch (this.orient[var1]) {
  303.          case 1:
  304.             this.xPos[var1] -= this.elemMove;
  305.             break;
  306.          case 2:
  307.             this.xPos[var1] += this.elemMove;
  308.             break;
  309.          case 3:
  310.             this.yPos[var1] -= this.elemMove;
  311.             break;
  312.          case 4:
  313.             this.yPos[var1] += this.elemMove;
  314.       }
  315.  
  316.       if (this.checkErrorPos(var1, this.xPos[var1], this.yPos[var1])) {
  317.          this.gameOverOK = true;
  318.       }
  319.  
  320.       if (this.numRElem[0] > 39) {
  321.          this.gameOverOK = true;
  322.       }
  323.  
  324.       if (this.score > 350) {
  325.          this.gameOverOK = true;
  326.       }
  327.  
  328.       if (var1 == 0) {
  329.          for(int var3 = 0; var3 < this.numTarget; ++var3) {
  330.             if (this.xPos[0] == this.xTPos[var3] && this.yPos[0] == this.yTPos[var3]) {
  331.                this.iEatedTarget = this.iCurrentTarget[var3];
  332.                this.ActionsOnEatedTarget();
  333.                this.targetOK = false;
  334.                this.calculateScore();
  335.                int var10002 = this.numRElem[0]++;
  336.             }
  337.          }
  338.       }
  339.  
  340.       this.elemPositions[var1][this.numRElem[var1] - 1][0] = this.xPos[var1];
  341.       this.elemPositions[var1][this.numRElem[var1] - 1][1] = this.yPos[var1];
  342.  
  343.       for(int var4 = 0; var4 < this.numRElem[var1] - 1; ++var4) {
  344.          this.elemPositions[var1][var4][0] = this.elemPositions[var1][var4 + 1][0];
  345.          this.elemPositions[var1][var4][1] = this.elemPositions[var1][var4 + 1][1];
  346.       }
  347.  
  348.    }
  349.  
  350.    public void drawElem() {
  351.       this.mainGraphics.setColor(255, 255, 255);
  352.       this.mainGraphics.fillRect(0, 0, ((Canvas)this).getWidth(), ((Canvas)this).getHeight());
  353.       this.mainGraphics.setColor(0, 0, 0);
  354.       this.mainGraphics.fillRect(0, 0, this.iScreenWidth, this.elemMove);
  355.       this.mainGraphics.fillRect(0, this.iPlayHeight, this.iScreenWidth, 2);
  356.       this.mainGraphics.fillRect(0, 0, this.elemMove, this.iPlayHeight);
  357.       this.mainGraphics.fillRect(this.iScreenWidth - this.elemMove, 0, this.elemMove, this.iPlayHeight);
  358.       Font var1 = Font.getFont(32, 1, 8);
  359.       this.mainGraphics.setFont(var1);
  360.  
  361.       for(int var2 = 0; var2 < this.bordersElem; ++var2) {
  362.          this.mainGraphics.fillRect(this.borders[var2][0], this.borders[var2][1], this.elemMove, this.elemMove);
  363.       }
  364.  
  365.       if (this.gameOverOK) {
  366.          --this.lives;
  367.          this.snakeTimer.cancel();
  368.          if (this.lives == 0) {
  369.             this.mainGraphics.drawString("GAME OVER ", 25, 40, 20);
  370.          }
  371.  
  372.          if (this.lives > 0) {
  373.             this.gameOverOK = false;
  374.             this.bContinue = true;
  375.             this.mainGraphics.drawString("Press FIRE", 25, 40, 20);
  376.          }
  377.       }
  378.  
  379.       this.mainGraphics.drawString("L:" + this.level + "  S:" + this.score + "  Lives:" + this.lives, 1, this.iPlayHeight, 20);
  380.  
  381.       for(int var3 = 0; var3 < this.numSnakes; ++var3) {
  382.          if (var3 != 0) {
  383.             this.mainGraphics.setColor(0, 255, 0);
  384.          }
  385.  
  386.          for(int var4 = 0; var4 < this.numRElem[0] - 1; ++var4) {
  387.             this.mainGraphics.fillRoundRect(this.elemPositions[var3][var4][0], this.elemPositions[var3][var4][1], this.elemMove, this.elemMove, this.elemMove - 1, this.elemMove - 1);
  388.          }
  389.       }
  390.  
  391.       if (this.targetOK) {
  392.          this.mainGraphics.setColor(255, 0, 0);
  393.  
  394.          for(int var6 = 0; var6 < this.numTarget; ++var6) {
  395.             this.mainGraphics.fillRect(this.xTPos[var6], this.yTPos[var6], this.elemMove, this.elemMove);
  396.          }
  397.  
  398.          for(int var5 = 0; var5 < this.numTarget; ++var5) {
  399.             this.setCurrentTarget(this.iCurrentTarget[var5], this.xTPos[var5], this.yTPos[var5]);
  400.          }
  401.       } else {
  402.          for(int var7 = 0; var7 < this.numTarget; ++var7) {
  403.             this.iCurrentTarget[var7] = this.chooseCurrentTarget();
  404.  
  405.             while(true) {
  406.                int var8;
  407.                for(var8 = -1; var8 < 0; var8 = this.rand.nextInt()) {
  408.                }
  409.  
  410.                int var10002;
  411.                for(this.xTPos[var7] = var8 % this.iScreenWidth; this.xTPos[var7] % this.elemMove != 0; var10002 = this.xTPos[var7]++) {
  412.                }
  413.  
  414.                for(var8 = -1; var8 < 0; var8 = this.rand.nextInt()) {
  415.                }
  416.  
  417.                for(this.yTPos[var7] = var8 % this.iScreenHeight; this.yTPos[var7] % this.elemMove != 0; var10002 = this.yTPos[var7]++) {
  418.                }
  419.  
  420.                if (this.checkTargetNewPos(this.xTPos[var7], this.yTPos[var7])) {
  421.                   break;
  422.                }
  423.             }
  424.          }
  425.  
  426.          this.targetOK = true;
  427.       }
  428.  
  429.       if (this.fireOK && this.iEatedTarget == 2) {
  430.          this.mainGraphics.setColor(0, 0, 0);
  431.          switch (this.orient[0]) {
  432.             case 1:
  433.                this.mainGraphics.drawLine(this.xPos[0], this.yPos[0], this.xPos[0] - 10, this.yPos[0]);
  434.                break;
  435.             case 2:
  436.                this.mainGraphics.drawLine(this.xPos[0], this.yPos[0], this.xPos[0] + 10, this.yPos[0]);
  437.                break;
  438.             case 3:
  439.                this.mainGraphics.drawLine(this.xPos[0], this.yPos[0] - 10, this.xPos[0], this.yPos[0]);
  440.                break;
  441.             case 4:
  442.                this.mainGraphics.drawLine(this.xPos[0], this.yPos[0] + 10, this.xPos[0], this.yPos[0]);
  443.          }
  444.  
  445.          this.fireOK = false;
  446.       }
  447.  
  448.    }
  449.  
  450.    public void paint(Graphics var1) {
  451.       var1.drawImage(this.mainImage, 0, 0, 20);
  452.    }
  453.  
  454.    public void CalculateNext(int var1) {
  455.       for(int var2 = 0; var2 < this.numSnakes; ++var2) {
  456.          this.method_0(var2);
  457.          this.calculateElem(var2, var1);
  458.       }
  459.  
  460.       this.drawElem();
  461.       ((Canvas)this).repaint();
  462.    }
  463.  
  464.    public void keyPressed(int var1) {
  465.       switch (((Canvas)this).getGameAction(var1)) {
  466.          case 1:
  467.             if (this.orient[0] != 4 && this.yPos[0] == this.yPosOld[0]) {
  468.                this.orient[0] = 3;
  469.             }
  470.             break;
  471.          case 2:
  472.             if (this.orient[0] != 2 && this.xPos[0] == this.xPosOld[0]) {
  473.                this.orient[0] = 1;
  474.             }
  475.          case 3:
  476.          case 4:
  477.          case 7:
  478.          default:
  479.             break;
  480.          case 5:
  481.             if (this.orient[0] != 1 && this.xPos[0] == this.xPosOld[0]) {
  482.                this.orient[0] = 2;
  483.             }
  484.             break;
  485.          case 6:
  486.             if (this.orient[0] != 3 && this.yPos[0] == this.yPosOld[0]) {
  487.                this.orient[0] = 4;
  488.             }
  489.             break;
  490.          case 8:
  491.             this.fireOK = true;
  492.             if (this.bContinue) {
  493.                this.setAll();
  494.                this.bContinue = false;
  495.             }
  496.       }
  497.  
  498.    }
  499.  
  500.    // $FF: synthetic method
  501.    static int[] access$000(FunSnakeCanvas var0) {
  502.       return var0.orient;
  503.    }
  504. }
  505.